'use strict';
/**
 * author：小小游 --- allen
 * date：2018.02.05
 * lastUpdateDate：2018.02.05
 * description：Generator函数与yield语句的使用
 */
 /**
  * 这是一个generator函数，内部它实现了Iterator接口
  * generator函数可以配合yield语句一起执行，如果没有yield语句，
  * 那么当调用next()方法的时候，就会执行完整个generator函数
  * 如果有了yield语句，它会把generator函数内部分成几段去执行，
  * 那么每一个断点是通过yield语句来暂停的
  * yield语句hereturn语句的区别就在于：yield语句可以返回多个值，
  * 而return语句每次只能返回一个值
  */
/**
 * yield语句默认情况下返回undefined，不会抛出异常
 * 但是我们可以手动捕获这个异常错误信息，如下所示：
 * try {
 *     // 需要执行的代码
 * } catch (e) {
 *     console.log('a mistake has happened!');
 * }
 */
function * fn () {
    let qq;
    // 正常情况下调用是没有任何问题的，如下：
    // qq = yield '214913005';
    // console.log(qq);

    /**
     * ff是我瞎写的，根本为定义，这时候程序会抛出异常，
     * 需要我们内部手动去捕获这个异常错误信息，如果内部
     * 没有捕获这个异常错误信息，我们也可以在外部捕获
     * 这个异常错误信息
     */
    // try {
    //     qq = yield ff;
    // } catch (e) {
    //     console.log('a mistake has happened of qq one!');
    // }
    // // 那么既然发生了错误，这个qq的值自然是undefined
    // console.log(qq);
}

let iterator = fn ();
iterator.next();
iterator.next('13710681303');
// 外部抛出异常，自己处理，挺好！
try {
    iterator.throw('error!');
} catch (e) {
    console.log('a mistake has happened of qq two!');
}
